package com.yonyou.rabbitmq.receiver.basic.direct;

import com.rabbitmq.client.*;
import com.yonyou.rabbitmq.utils.RabbitmqUtils;

import java.io.IOException;

public class Consumer {

    public static void main(String[] args) {
        Connection connection = null;
        Channel channel = null;

        try {
            //获取连接对象
            connection = RabbitmqUtils.getConnection();
            //获取通道
            if (connection != null) {
                channel = connection.createChannel();
                //通道绑定对应消息队列
                /*
                 * 参数1 queue：队列名称(不存在自动创建)
                 * 参数2 durable：用来定义队列特性是否需要持久化(为true该队列将在服务器重启后保留下来)
                 * 参数3 exclusive：是否独占队列(为true仅限此连接)
                 * 参数4 autoDelete：是否在消费完成不再使用后自动删除队列
                 * 参数5 arguments：队列的其他属性（构造参数）
                 * */
                channel.queueDeclare("hello",false,false,false,null);

                //消费消息
                DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
                    //获取消息并且处理。此方法类似于事件监听，有消息时会被自动调用
                    @Override
                    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                        System.out.println("message:"+new String(body));  //body即消息体
                    }
                };
                /*
                 * 参数1 queue：队列名称
                 * 参数2 autoAck：开启消息的自动确认机制
                 * 参数3 Consumer callback：消费时的回调接口
                 * */
                channel.basicConsume("hello",true, defaultConsumer);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            System.out.println("消费者消费消息完成......");
            //RabbitmqUtils.close(channel,connection);
        }
    }

}
